万卷网> 信息学奥赛 >NOIP普及组 > 2012年信息学奥赛NOIP普及组

2012年信息学奥赛NOIP普及组
初赛 更早 2023-08-21 20:52:15 125

一、单选题

1.

原字符串中任意一段连续 的字符组成的新字符串称为子串。则字符串“ AAABBBCCC”共有( )个 不同的非空子串 。

A.

3

B.

12

C.

36

D.

45

2.

1946 年诞生于美国宾夕法尼亚大学的ENIAC属于( )计算机。

A.

电子管

B.

晶体管

C.

集成电路

D.

超大规模集成电路

3.

( )不属于操作系统。

A.

Windows

B.

DOS

C.

PhotoShop

D.

NOI Linux

4.

如果一个栈初始时为空,且当前栈中的元素从栈底到栈顶依次为a, b,c(如右图所示),另有元素d已经出栈,则可能的入栈顺序是( )。


A.

a, d, c, b

B.

b, a, c, d

C.

a, c, b, d

D.

d, a, b, c

5.

( )是一种先进先出的线性表。

A.

B.

队列

C.

哈希表(散列表)

D.

二叉树

6.

使用冒泡排序对序列进行升序排序,列每执行一次交换操作将会减少1个逆序对,  因此序

5, 4, 3, 2, 1

需要执行( )次交换操作,才能完成冒泡排序。

A.

0

B.

5

C.

1

D.

15

7.

目前个人电脑的( )市场占有率最靠前的厂商包括Intel 、AMD等公司。


A.

显示器

B.

CPU

C.

内存

D.

鼠标

8.

( )是目前互联网上常用的E-mail服务协议。

A.

HTTP

B.

FTP

C.

POP3

D.

Telnet

9.

无论是TCP/IP模型还是OSI模型,都可以视为网络的分层模型,每个网络协议都会被归入某一层中。如果用现实生活中的例子来比喻这些“层”,以下最恰当的是 ( )。

A.

中国公司的经理与法国公司的经理交互商业文件

B.

军队发布命令

C.

国际会议中,每个人都与他国地位对等的人直接进行会谈

D.

体育比赛中,每一级比赛的优胜者晋级上一级比赛

10.

在程序运行过程中,如果递归调用的层数过多,会因为( )引发错误。

A.

系统分配的 栈空间溢出

B.

系统分配的 堆空间溢出

C.

系统分配的 队列 空间溢出

D.

系统分配的 链表 空间溢出

11.

 计算机如果缺少( ),将无法正常启动。

A.

内存

B.

鼠标

C.

U盘

D.

摄像头

12.

( )就是把一个复杂的问题分成两个或者更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后的子问题可以简单的直接求解。而原问题的解就是子问题解的并。

A.

动态规划

B.

贪心

C.

分治

D.

搜索

13.

蓝牙和Wi-Fi都是( )设备。

A.

无线广域网

B.

无线城域网

C.

无线局域网

D.

无线路由器

14.

仿生学的问世开辟了独特的科学技术发展道路。人们研究生物体的结构、功能和工作原理,并将这些原理移植于新兴的工程技术之中。以下关于仿生学的叙述,错误的是( )。

A.

由研究蝙蝠,发明雷达

B.

由研究蜘蛛网,发明因特网

C.

由研究海豚,发明声纳

D.

由研究电鱼,发明伏特电池

15.

矢量图(Vector Image)图形文件所占的存储空间较小,并且不论如何放大、缩小或旋转等都不会失真,是因为它( )。

A.

记录了大量像素块的色彩值来表示图像

B.

用点、直线或者多边形等基于数学方程的几何图元来表示图像

C.

每个像素点的颜色信息均用矢量表示

D.

把文件保存在互联网,采用在线浏览的方式查看图像

16.

地址总线的位数决定了CPU可直接寻址的内存空间大小,例如地址总线为16 位, 其最大的可寻址空间为64KB 。如果地址总线是32 位,则理论上最大可寻址的内存空间为( ) 。

A.

128KB

B.

1MB

C.

1GB

D.

4GB

17.

如果一棵二叉树的中序遍历是BAC,那么它的先序遍历不可能 是( )。


A.

ABC

B.

CBA

C.

ACB

D.

BAC

18.

十六进制数  9A 在( )进制下是  232 。

A.

B.

C.

D.

十二

19.

( )是主要用于显示网页服务器或者文件系统的 HTML文件内容,并让用户与这些文件交互的一种软件。

A.

资源管理器

B.

浏览器

C.

电子邮件

D.

编译器

20.

目前计算机芯片(集成电路)制造的主要原料是( ),它是一种可以在沙子中提炼出的物质。

A.

B.

C.

D.

二、填空题

1.

在NOI期间,主办单位为了欢迎来自全国各地的选手,举行了盛大的晚宴。在第十八桌,有5名大陆选手和5名港澳选手共同进膳。为了增进交流,他们决定相隔就坐,即每个大陆选手左右相邻的都是港澳选手、每个港澳选手左右相邻的都是大陆选手。那么,这一桌共有            种不同的就坐方案。注意:如果在两个方案中,每个选手左边相邻的选手均相同,则视为同一个方案。

2.

如果平面上任取n个整点(横纵坐标都是整数) ,其中一定存在两个点,它们连线的中点也是整点,那么n至少是           

3.
#include <iostream>

using namespace std;
int n, i,j, a[100][100];

int solve(int x, inty)
{
	int u, v;

	if (x == n)
		return a[x][y];
	u = solve(x + 1, y);
	v = solve(x + 1, y + 1);
	if (u > v)
		return a[x][y] + u;
	else
		return a[x][y] + v;
}

int main()
{
	cin>>n;
	for (i = 1; i <= n; i++)
		for (j = 1; j <= i; j++)
			cin>>a[i][j];
	cout<<solve(1, 1)<<endl;
	return 0;
}


输入 :

5

2

-1 4

2 -1 -2

-1 6 4 0

3 2 -1 5 8

输出:                     

4.
#include <iostream>

#include <string>
using namespace std;

int n, ans, i, j;
string s;

charget(inti)
{
	if (i < n)
		return s[i];
	else
		return s[i-n];
}
int main()
{
	cin>>s;
	n = s.size();
	ans = 0;
	for (i = 1; i <= n-1; i++)
	{
		for (j = 0; j <= n-1; j++) if (get(i+j) < get(ans+j))
		{
			ans = i;
			break;
		}
		else if (get(i+j) > get(ans+j))
			break;
	}
	for (j = 0; j <= n-1; j++)
		cout<<get(ans+j);
	cout<<endl;
}


输入: CBBADADA

输出:                   

5.
#include <iostream>
using namespace std;

int a, b, c, d, e, ans;

int main()
{
	cin>>a>>b>>c;
	d = a+b;
	e = b+c;
	ans = d+e;
	cout<<ans<<endl;
}


输入: 1 2 5

输出:           

6.
#include<iostream>
using namespace std;

int n, i, ans;

int main()
{
	cin>>n;
	ans = 0;
	for (i = 1; i <= n; i++)
		if (n % i == 0)
			ans++;
	cout<<ans<<endl;
}


输入: 18

输出:            

三、简答题

1.

完善程序:(排列数)输入两个正整数n, m (1 ≤n ≤20, 1 ≤m ≤n),在 1~n  中任取 m 个数,按字典序从小到大输出所有这样的排列。例如

输入

3 2

输出:


1 2
1 3
2 1
2 3
3 1
3 2


#include<iostream>

#include<cstring>

using namespace std;


const int SIZE = 25;


bool used[SIZE];

int data[SIZE];

int n, m, i,j, k;

bool flag;


int main()

{

cin>>n>>m;

memset(used, false, sizeof(used));

for (i = 1; i <= m; i++)

{

data[i] = i;

used[i] = true;

}

flag = true;

while (flag)

{

for (i = 1; i <= m-1; i++) cout<<data[i]<<" ";

cout<<data[m]<<endl;

flag =             ①             ;

for (i = m; i >= 1; i--)

{

           ②          ;

for (j = data[i]+1; j <= n; j++) if (!used[j])

{

used[j] = true;

data[i] =            ③           ;

flag = true;

break;

}

if (flag)

{

for (k = i+1; k <= m; k++)

for (j = 1; j <=       ④      ; j++) if (!used[j])

{

data[k] = j;

used[j] = true;

break;

}

       ⑤      ;

}

}

}

}

2.

完善程序:坐标统计

输入 n 个整点在平面上的坐标。 对于每个点,可以控制所有位于它左下方的点(即 x 、y 坐标都比它小),它可以控制的点的数目称为“战斗力”。依次输出每个点的战斗力,最后输出战斗力最高的点的编号(如果两个点战斗力一样,    输出较大的编号)。


#include<iostream>

using namespace std;


const int SIZE = 100;


intx[SIZE], y[SIZE], f[SIZE];

int n, i,j, max_f, ans;


int main()

{

cin>>n;

for (i = 1; i <= n; i++)

cin>>x[i]>>y[i];

max_f = 0;

for (i = 1; i <= n; i++)

{

f[i] =          ①      ;

for (j = 1; j <= n; j++)


{

if (x[j] < x[i] &&           ②    )

③    

}

if (        ④     )

{

max_f = f[i];

      ⑤      ;

}

}

for (i = 1; i <= n; i++)

cout<<f[i]<<endl;

cout<<ans<<endl;

}

公众号
客服 反馈
顶部